package com.wrial.kind.doublepointer;
/*
 * @Author  Wrial
 * @Date Created in 14:49 2020/8/7
 * @Description
 */

public class merge两个有序数组 {

    /**
     * nums1容量为m+n
     * 使用双指针，p1指向nums1最大值，p2指向nums2最大值，需要一个insert指向当前插入的位置
     * 和链表合并一模一样，可以从后往前也可以从前往后
     */
    public void merge(int[] nums1, int m, int[] nums2, int n) {
        int p1 = m - 1;
        int p2 = n - 1;
        int curInsert = m + n - 1;

        while (p1 >= 0 && p2 >= 0) {
            if (nums1[p1] > nums2[p2]) {
                nums1[curInsert--] = nums1[p1--];
            } else {
                nums1[curInsert--] = nums2[p2--];
            }
        }
        //下面这种情况是nums1剩余，但因为使用的nums1数组，因此可以省略下面步骤
//        while (p1 >= 0) {
//            nums1[curInsert] = nums1[p1--];
//        }
        while (p2>=0){
            nums1[curInsert--] = nums2[p2--];
        }
    }
}
